iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0

編譯過程

  1. 預處理(Preprocessing)
📌 g++ -E main.cpp -o main.i
  • 處理 #include#define
  • 移除註解
  • 輸出展開後的程式碼檔案(main.i
📌 #include <iostream>
   #define A 123
  1. 編譯(Compilation)
📌 g++ -S main.i -o main.s
  • 將預處理後的程式碼轉換成 組合語言
  • 語法檢查、最佳化、轉換 IR
  • 輸出 .s 檔案
📌 _main:
	    push    rbp
	    mov     rdi, OFFSET FLAT:.LC0
	    call    std::cout
	    pop     rbp
	    ret
  1. 彙編(Assembling)
📌 g++ -c main.s -o main.o
  • 將組合語言 .s 轉換成 機器碼(二進位的目標檔)
  • .o 檔案(object file)裡面包含二進位指令,但還沒能獨立執行
  • 可能有「未解決的符號」(像是std::cout

std::cout 可透過加入 using 解決

📌 using namespace std;
  1. 連結(Linking)
📌 g++ main.o -o main
  • .o 檔案與所需的 標準函式庫(如:libstdc++)做連結
  • 解決外部符號(例如 std::cout 的實作在哪裡)
  • 輸出 可執行檔(Windows 上是 .exe,Linux/macOS 上是無副檔名的 ELF 檔)
  1. 執行(Execution)
📌 ./main
  • 將程式結果輸出

範例

📌 #include <iostream>
		using namespace std;
		int main()
		{
		    cout << "Hello World!!!" << endl;
		    return 0;
		}
  • 別忘了程式結束加上return 0

上一篇
[DAY1]為何C++?
系列文
C++入門即放棄2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言